//axios基础的封装
import axios from "axios";
import {
  useUserStore
} from "@/store/user";
import {
  ElMessage
} from 'element-plus'
import 'element-plus/theme-chalk/el-message.css'
//js文件用router,vue文件用useRouter
import router from "@/router";

const httpInstance = axios.create({

  //基础路径
  baseURL: 'http://8.134.78.60:8080/user',
  //超时时间
  timeout: 5000
})

// // axios请求拦截器
httpInstance.interceptors.request.use(config => {
  // 1. 从pinia获取token数据
  const userStore = useUserStore()
  // 2. 从Pinia中获取token数据，并添加到请求头中
  const token = userStore.token
  if (token) {
    config.headers.token = token
  }
  return config
}, e => Promise.reject(e))



// // axios响应拦截器
httpInstance.interceptors.response.use(response => {

  //是错误码
  if (response.data.code === 0) {
    ElMessage({
      type: "warning",
      message: response.data.msg
    })

    //进到这里就代表当前操作是不成功的。直接什么都不做吗？

  } else {
    //data才是后端返回的result数据

    return response.data;
  }
}, error => {

  // 400 代表请求业务异常
  if (error.response.status === 400) {
    ElMessage({
      type: "error",
      message: error.response.data.msg
    })
    // 可以在这里返回一个 rejected 的 Promise，这样就会抛到调用处
    return Promise.reject(new Error(error.response.data));
  }

  // 401 代表token失效
  if (error.response.status === 401) {
    const userStore = useUserStore()
    userStore.logout()


    ElMessage({
      type: "error",
      message: error.response.data
    })

    router.push('/login')
  }
});

export default httpInstance;